# -*-coding:utf-8 -*-
# Author : Mo
# Data : 2022/2/4 21:08
from django.shortcuts import render,redirect
from app01 import models
from app01.utils.pagination import Pagination
from app01.utils.form import AdminModelForm,AdminEditModelForm,AdminResetModelForm
from app01.utils.encrypt import md5

def admin_list(request):
    """ 管理员列表 """
    # # 检查用户是否已登录，已登录，继续想下去。未登录，跳转回登录页面。
    # # 用户发来请求，获取cookie随机字符串，拿着随机字符串看看session中有没有。
    # # request.session["info"]
    # info = request.session.get("info")
    # if not info:
    #     return redirect('/login')

    # 搜索
    data_dict = {}
    search_data = request.GET.get('q', "")
    if search_data:
        data_dict["username__contains"] = search_data

    # 根据搜索条件去数据库获取
    queryset = models.Admin.objects.filter(**data_dict)

    # 分页
    page_object = Pagination(request,queryset)
    context = {
        "queryset": page_object.page_queryset,
        "page_string": page_object.html(),
        "search_data": search_data,
    }
    return render(request,"admin_list.html",context)

def admin_add(request):
    """ 添加管理员 """

    title = "新建管理员"
    if request.method == "GET":
        form = AdminModelForm()
        return render(request,"change.html", {"form": form,"title":title})

    # 用户POST提交数据，数据校验
    form = AdminModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect("/admin/list/")
    # 校验失败(在页面上显示错误信息)
    return render(request,'change.html',{"form": form,"title":title})

def admin_edit(request,nid):
    """ 编辑管理员 """
    # 对象/None
    row_object = models.Admin.objects.filter(id=nid).first()
    if not row_object:
        # return render(request,"error.html",{"msg":"数据不存在"})
        return redirect("/admin/list/")
    title = "编辑管理员"
    if request.method == "GET":
        form = AdminEditModelForm(instance=row_object)
        return render(request, 'change.html', {"form":form,"title": title})
    form = AdminEditModelForm(data=request.POST,instance=row_object)
    if form.is_valid():
        form.save()
        return redirect("/admin/list/")
    # 校验失败(在页面上显示错误信息)
    return render(request, 'change.html', {"form": form, "title": title})


def admin_delete(request,nid):
    """ 删除管理员 """
    row_object = models.Admin.objects.filter(id=nid).first()
    if not row_object:
        return redirect("/admin/list/")
    models.Admin.objects.filter(id=nid).delete()
    return redirect('/admin/list/')


def admin_reset(request,nid):
    """ 重置密码 """
    row_object = models.Admin.objects.filter(id=nid).first()
    if not row_object:
      return redirect("/admin/list/")
    title = "编辑管理员 - {}".format(row_object.username)

    if request.method == "GET":
        form = AdminResetModelForm()
        return render(request, 'change.html', {"form": form, "title": title})

    form = AdminResetModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        admin_object = models.Admin.objects.filter(id=nid, password=md5(form.cleaned_data["password"])).first()
        if not admin_object:
            form.add_error("password", "密码不能与以前一致")
            return render(request, 'change.html', {"form": form, "title": title})
        form.save()
        return redirect("/admin/list/")
    return render(request, 'change.html', {"form": form, "title": title})
